package uade.distribuidas.server;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

import uade.distribuidas.repo.type.CondicionIvaType;
import uade.distribuidas.repo.type.EstadoSolicitudType;
import uade.distribuidas.repo.type.EstadoType;
import uade.distribuidas.repo.type.ListaType;
import uade.distribuidas.repo.type.RoleType;
import uade.distribuidas.server.domain.Cliente;
import uade.distribuidas.server.domain.CondicionVenta;
import uade.distribuidas.server.domain.Cotizacion;
import uade.distribuidas.server.domain.Financiacion;
import uade.distribuidas.server.domain.ItemSolicitud;
import uade.distribuidas.server.domain.ListaPrecio;
import uade.distribuidas.server.domain.PagoContado;
import uade.distribuidas.server.domain.Proveedor;
import uade.distribuidas.server.domain.Rodamiento;
import uade.distribuidas.server.domain.Solicitud;
import uade.distribuidas.server.domain.User;
import uade.distribuidas.server.hibernate.HibernateUtil;


public class Test {

	public Test() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * CARGAS VARIAS DE PRUEBAS
	 */
	
	public static void main(String[] args) {
	    System.out.println("Hibernate Test");
	  	Session session = HibernateUtil.getSessionFactory().openSession();
	   
	    Transaction tx = session.beginTransaction();
	   
	  		  Rodamiento rod = new Rodamiento();
	          rod.setMarca("ZKL");
	          rod.setNumeroSerie("22310");
	          rod.setOrigen("Japon");
	          rod.setPrecio((float) 100.50);
	          rod.setStock(40);
	          rod.setSufijo("CCW33");
	          
	          Rodamiento rod2 = new Rodamiento(); 
	          rod2.setMarca("SNR");
	          rod2.setNumeroSerie("6200");
	          rod2.setOrigen("Francia");
	          rod2.setPrecio((float) 100.50);
	          rod2.setStock(40);
	          rod2.setSufijo("");
	          
	          session.save(rod);
	          session.save(rod2);
	   	   
	          CondicionVenta con = new Financiacion();
	          ((Financiacion)con).setDescripcion("Financiacion Intento");
	          ((Financiacion)con).setRecargo((float) 10.5);
	          ((Financiacion)con).setCantidadDias(60);
	          	          
	          CondicionVenta con2 = new PagoContado();
	          ((PagoContado)con2).setDescripcion("Financiacion Intento");
	          ((PagoContado)con2).setDescuento((float) 10.5);
	          
	          session.save(con);
	          session.save(con2);

	          Cliente cliente = new Cliente();
	          cliente.setCondicionIva(CondicionIvaType.RESPONSABLE_INSCRIPTO);
	          cliente.setCuil("1234");
	          cliente.setRazonSocial("Saraza");
	          List<CondicionVenta> condiciones = new ArrayList<CondicionVenta>();
	          condiciones.add(con2);
	          cliente.setCondicionesVenta(condiciones);
	          cliente.setEstado(EstadoType.ACTIVO);
	          session.save(cliente);
	          
	          Proveedor prov = new Proveedor();
	          prov.setCuil("1234");
	          prov.setRazonSocial("Saraza");
	          
	          Proveedor prov2 = new Proveedor();
	          prov.setCuil("1324");
	          prov.setRazonSocial("Sarasa");
	          
	          session.save(prov);
	          session.save(prov2);
	       
	          Solicitud solicitud = new Solicitud();
	          solicitud.setEstado(EstadoSolicitudType.PENDIENTE);
	          solicitud.setNumero("A1234");
	          solicitud.setCliente(cliente);
	          solicitud.setFechaEnvio(new Date());
	          List<ItemSolicitud> itemsSolicitudes = new ArrayList<ItemSolicitud>();
	          ItemSolicitud itemSolicitud = new ItemSolicitud();
	          itemSolicitud.setRodamiento(rod);
	          itemSolicitud.setCantidad(5);
	          ItemSolicitud itemSolicitud2 = new ItemSolicitud();
	          itemSolicitud2.setRodamiento(rod);
	          itemSolicitud2.setCantidad(5);
	          itemsSolicitudes.add(itemSolicitud);
	          itemsSolicitudes.add(itemSolicitud2);
	          solicitud.setItems(itemsSolicitudes);
	          
	          session.save(solicitud);
	          
	          Cotizacion cotizacion = new Cotizacion();
	          cotizacion.setCliente(cliente);
	          cotizacion.setCondiciones(condiciones);
	          cotizacion.setFechaRemision(new Date());
	          cotizacion.setSolicitud(solicitud);
	          cotizacion.setTermino(60);
	          
	          
	          User u1 = new User();
	          u1.setUsername("cpr");
	          u1.setPassword("cpr");
	          u1.setEstado(EstadoType.ACTIVO);
	          u1.setRol(RoleType.ROLE_ADMIN);
	          
	          User u2 = new User();
	          u2.setUsername("odv");
	          u2.setPassword("odv");
	          u2.setEstado(EstadoType.ACTIVO);
	          u2.setRol(RoleType.ROLE_USER);
	          
	          ListaPrecio l1= new ListaPrecio();
	          l1.setEstado(EstadoType.ACTIVO);
	          l1.setNumero("1");
	          l1.setProveedor(prov);
	          l1.agregarRodamiento(rod);
	          l1.agregarRodamiento(rod2);
	          l1.setVigencia(new Date());
	          l1.setTipo(ListaType.GENERAL);
	          l1.setTermino("30 Dias");
	        
	          ListaPrecio l2= new ListaPrecio();
	          l2.setEstado(EstadoType.ACTIVO);
	          l2.setNumero("2");
	          l2.setProveedor(prov);
	          l2.agregarRodamiento(rod);
	          l2.setVigencia(new Date());
	          l2.setTipo(ListaType.OFERTA);
	          l2.setTermino("10 Dias");
	          
	          ListaPrecio l3= new ListaPrecio();
	          l3.setEstado(EstadoType.ACTIVO);
	          l3.setNumero("3");
	          l3.setProveedor(prov2);
	          l3.agregarRodamiento(rod);
	          l3.agregarRodamiento(rod2);
	          l3.setVigencia(new Date());
	          l3.setTipo(ListaType.GENERAL);
	          l3.setTermino("180 Dias");
	        
	          ListaPrecio l4= new ListaPrecio();
	          l4.setEstado(EstadoType.ACTIVO);
	          l4.setNumero("4");
	          l4.setProveedor(prov2);
	          l4.agregarRodamiento(rod);
	          l4.setVigencia(new Date());
	          l4.setTipo(ListaType.OFERTA);
	          l4.setTermino("30 Dias");
	          
	          
	          session.save(u1);
	          session.save(u2);
	          
	          session.save(l1);
	          session.save(l2);
	          session.save(l3);
	          session.save(l4);
	          
	          session.flush();
	        
	          tx.commit();
	          session.close();

	  	System.out.println("Done");

	}

}
